package com.aincc.lib.network.http;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.message.BasicNameValuePair;
import com.aincc.lib.network.common.BaseParam;
import com.aincc.lib.network.common.NetworkDefine;
import com.aincc.lib.util.Utils;
/**
*
* <h3><b>HttpRequestParam</b></h3></br>
*
* @author aincc@barusoft.com
* @version 1.0.0
* @since 1.0.0
*/
public class HttpParam extends BaseParam
{
/**
* encoding
*
* @since 1.0.0
*/
protected String encoding = null;
/**
* post method flag
*
* @since 1.0.0
*/
protected boolean isPostMethod = true;
/**
* using cookie flag
*
* @since 1.0.0
*/
protected boolean isUseCookie = true;
/**
* exist multipart flag
*
* @since 1.0.0
*/
protected boolean isExistMultipart = false;
/**
* HTTP header
*
* @since 1.0.0
*/
protected LinkedHashMap<String, String> header = new LinkedHashMap<String, String>();
/**
* parameter
*
* @since 1.0.0
*/
protected LinkedHashMap<String, String> param = new LinkedHashMap<String, String>();
/**
* array parameter
*
* @since 1.0.0
*/
protected LinkedHashMap<String, String[]> paramArray = new LinkedHashMap<String, String[]>();
/**
* file parameter (for POST method)
*
* @since 1.0.0
*/
protected LinkedHashMap<String, File> fileParam = new LinkedHashMap<String, File>();
/**
* constructor
*
* @since 1.0.0
* @param requestKey
*/
public HttpParam(String requestKey)
{
super(requestKey);
this.encoding = NetworkDefine.ENCODING_EUCKR;
}
/**
* @return the encoding
*/
public String getEncoding()
{
return encoding;
}
/**
* @param encoding
* the encoding to set
*/
public void setEncoding(String encoding)
{
this.encoding = encoding;
}
/**
* @return the isPostMethod
*/
public boolean isPostMethod()
{
return isPostMethod;
}
/**
* @param isPostMethod
* the isPostMethod to set
*/
public void setPostMethod(boolean isPostMethod)
{
this.isPostMethod = isPostMethod;
}
/**
* @return the isUseCookie
*/
public boolean isUseCookie()
{
return isUseCookie;
}
/**
* @param isUseCookie
* the isUseCookie to set
*/
public void setUseCookie(boolean isUseCookie)
{
this.isUseCookie = isUseCookie;
}
/**
* @return the isExistMultipart
*/
public boolean isExistMultipart()
{
return isExistMultipart;
}
/**
* @param isExistMultipart
* the isExistMultipart to set
*/
public void setExistMultipart(boolean isExistMultipart)
{
this.isExistMultipart = isExistMultipart;
}
/**
* @return the header
*/
public LinkedHashMap<String, String> getHeader()
{
return header;
}
/**
* @param header
* the header to set
*/
public void setHeader(LinkedHashMap<String, String> header)
{
this.header = header;
}
/**
* @return the param
*/
public LinkedHashMap<String, String> getParam()
{
return param;
}
/**
* @param param
* the param to set
*/
public void setParam(LinkedHashMap<String, String> param)
{
this.param = param;
}
/**
* @return the paramArray
*/
public LinkedHashMap<String, String[]> getParamArray()
{
return paramArray;
}
/**
* @param paramArray
* the paramArray to set
*/
public void setParamArray(LinkedHashMap<String, String[]> paramArray)
{
this.paramArray = paramArray;
}
/**
* @return the fileParam
*/
public LinkedHashMap<String, File> getFileParam()
{
return fileParam;
}
/**
* @param fileParam
* the fileParam to set
*/
public void setFileParam(LinkedHashMap<String, File> fileParam)
{
this.fileParam = fileParam;
if (null != fileParam && !fileParam.isEmpty())
{
setExistMultipart(true);
}
}
/**
* get query parameter string
*
* @since 1.0.0
* @return query parameter string
*/
public String getGetParams()
{
return getGetParams(this.encoding);
}
/**
* get query parameter string
*
* @since 1.0.0
* @param encoding
* @return query parameter string
*/
public String getGetParams(String encoding)
{
StringBuilder sb = new StringBuilder();
if (null != param && !param.isEmpty())
{
String urlEncoderStr = null;
Set<Entry<String, String>> hashSet = param.entrySet();
final Iterator<Entry<String, String>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, String> me = (Map.Entry<String, String>) it.next();
urlEncoderStr = null;
try
{
urlEncoderStr = URLEncoder.encode(me.getValue(), encoding);
urlEncoderStr = urlEncoderStr.replaceAll("\\+", "%20");
}
catch (Exception e)
{
urlEncoderStr = null;
}
if (!Utils.isTrimEmpty(urlEncoderStr))
{
if (0 < sb.length())
{
sb.append("&");
}
sb.append(me.getKey());
sb.append("=");
sb.append(urlEncoderStr);
}
}
}
if (null != paramArray && !paramArray.isEmpty())
{
String urlEncoderStr = null;
Set<Entry<String, String[]>> hashSet = paramArray.entrySet();
final Iterator<Entry<String, String[]>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, String[]> me = (Map.Entry<String, String[]>) it.next();
String[] values = me.getValue();
for (int i = 0; i < values.length; i++)
{
urlEncoderStr = null;
try
{
urlEncoderStr = URLEncoder.encode(values[i], encoding);
urlEncoderStr = urlEncoderStr.replaceAll("\\+", "%20");
}
catch (Exception e)
{
urlEncoderStr = null;
}
if (!Utils.isTrimEmpty(urlEncoderStr))
{
if (0 < sb.length())
{
sb.append("&");
}
sb.append(me.getKey());
sb.append("=");
sb.append(urlEncoderStr);
}
}
}
}
if (0 < sb.length())
{
return sb.toString();
}
return null;
}
/**
* get UrlEncodedFormEntity
*
* @since 1.0.0
* @return UrlEncodedFormEntity
*/
public UrlEncodedFormEntity getPostParams()
{
return getPostParams(this.encoding);
}
/**
* get UrlEncodedFormEntity
*
* @since 1.0.0
* @param encoding
* @return UrlEncodedFormEntity
*/
public UrlEncodedFormEntity getPostParams(String encoding)
{
UrlEncodedFormEntity entity = null;
List<BasicNameValuePair> paramList = new ArrayList<BasicNameValuePair>();
if (null != param && !param.isEmpty())
{
Set<Entry<String, String>> hashSet = param.entrySet();
final Iterator<Entry<String, String>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, String> me = (Map.Entry<String, String>) it.next();
paramList.add(new BasicNameValuePair(me.getKey(), me.getValue()));
}
}
if (null != paramArray && !paramArray.isEmpty())
{
Set<Entry<String, String[]>> hashSet = paramArray.entrySet();
final Iterator<Entry<String, String[]>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, String[]> me = (Map.Entry<String, String[]>) it.next();
String[] values = me.getValue();
for (int i = 0; i < values.length; i++)
{
paramList.add(new BasicNameValuePair(me.getKey(), values[i]));
}
}
}
if (0 < paramList.size())
{
try
{
entity = new UrlEncodedFormEntity(paramList, encoding);
}
catch (Exception e)
{
e.printStackTrace();
entity = null;
}
}
return entity;
}
/**
* get MultipartEntity
*
* @since 1.0.0
* @return MultipartEntity
*/
public MultipartEntity getMultipartParams()
{
return getMultipartParams(this.encoding);
}
/**
* get MultipartEntity
*
* @since 1.0.0
* @param encoding
* @return MultipartEntity
*/
public MultipartEntity getMultipartParams(String encoding)
{
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
try
{
if (null != param && !param.isEmpty())
{
Set<Entry<String, String>> hashSet = param.entrySet();
final Iterator<Entry<String, String>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, String> me = (Map.Entry<String, String>) it.next();
entity.addPart(me.getKey(), new StringBody(me.getValue(), Charset.forName(encoding)));
}
}
if (null != paramArray && !paramArray.isEmpty())
{
Set<Entry<String, String[]>> hashSet = paramArray.entrySet();
final Iterator<Entry<String, String[]>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, String[]> me = (Map.Entry<String, String[]>) it.next();
String[] values = me.getValue();
for (int i = 0; i < values.length; i++)
{
entity.addPart(me.getKey(), new StringBody(values[i], Charset.forName(encoding)));
}
}
}
if (null != fileParam && !fileParam.isEmpty())
{
Set<Entry<String, File>> hashSet = fileParam.entrySet();
final Iterator<Entry<String, File>> it = hashSet.iterator();
while (it.hasNext())
{
Map.Entry<String, File> me = (Map.Entry<String, File>) it.next();
entity.addPart(me.getKey(), new FileBody(me.getValue()));
}
}
}
catch (Exception e)
{
e.printStackTrace();
entity = null;
}
return entity;
}
}